#Использовать json

Перем таблицаСинонимов;



Функция НайтиСинонимыВФайле(_xmlФайл)

    ИсходныеСинонимы = Новый таблицаЗначений;
    ИсходныеСинонимы.Колонки.Добавить("SourcePath");
    ИсходныеСинонимы.Колонки.Добавить("ElementType");
    ИсходныеСинонимы.Колонки.Добавить("ID");
    ИсходныеСинонимы.Колонки.Добавить("Descr");
    
    _читательФайла = Новый ЧтениеXML;
    _читательФайла.ОткрытьФайл(_xmlФайл);
    
    текущийЭлемент = Неопределено;
    ожидаюИмяСвойства = Ложь;
    ожидаюЯзыковойСиноним = Ложь;
    
    ожидаюКнопку = Ложь;
    текущееИмяКнопки = Неопределено;        
    
    ожидаюPopUp = Ложь;
    текущееИмяPopUp = Неопределено;        
    
    ожидаюПолеВвода = Ложь;
    текущееИмяПоляВвода= Неопределено;        
        
    текущееСвойство = Неопределено;
    
    Пока _читательФайла.Прочитать() Цикл
        
        Если _читательФайла.ТипУзла = ТипУзлаXML.НачалоЭлемента Тогда
            текущийЭлемент = _читательФайла.Имя;
        КонецЕсли;
        
        Если _читательФайла.ТипУзла = ТипУзлаXML.НачалоЭлемента и текущийЭлемент = "Properties" Тогда
            ожидаюИмяСвойства = Истина;
        КонецЕсли;
        
        Если ожидаюИмяСвойства И _читательФайла.ТипУзла = ТипУзлаXML.Текст И текущийЭлемент = "Name" Тогда
            текущееСвойство = _читательФайла.Значение;
            ожидаюИмяСвойства = Ложь;
            ожидаюЯзыковойСиноним = Истина;
        КонецЕсли;
        
        Если _читательФайла.ТипУзла = ТипУзлаXML.НачалоЭлемента и текущийЭлемент = "Button" Тогда
            ожидаюКнопку = Истина;
            текущееИмяКнопки = _читательФайла.ПолучитьАтрибут("name"); 
        КонецЕсли;
        
        Если _читательФайла.ТипУзла = ТипУзлаXML.НачалоЭлемента и текущийЭлемент = "Popup" Тогда
            ожидаюPopUp = Истина;
            текущееИмяPopUp = _читательФайла.ПолучитьАтрибут("name"); 
        КонецЕсли;
        
        Если _читательФайла.ТипУзла = ТипУзлаXML.НачалоЭлемента и текущийЭлемент = "InputField" Тогда
            ожидаюПолеВвода = Истина;
            текущееИмяПоляВвода = _читательФайла.ПолучитьАтрибут("name"); 
        КонецЕсли;
        
        
        Если ожидаюЯзыковойСиноним И _читательФайла.ТипУзла = ТипУзлаXML.Текст И текущийЭлемент = "v8:content" Тогда
            //Сообщить("Не хватает XPath очень " + _читательФайла.Значение);
            ожидаюЯзыковойСиноним = Ложь;
            
            очереднойСиноним = ИсходныеСинонимы.Добавить();
            очереднойСиноним.SourcePath = СтрЗаменить(_xmlФайл, ТекущийКаталог(),"");
            очереднойСиноним.ElementType = "Properties";
            очереднойСиноним.ID = текущееСвойство;
            очереднойСиноним.Descr = _читательФайла.Значение;
            
        КонецЕсли;
        
        Если ожидаюКнопку И _читательФайла.ТипУзла = ТипУзлаXML.Текст И текущийЭлемент = "v8:content" Тогда
            //Сообщить("Не хватает XPath очень " + _читательФайла.Значение);
            ожидаюКнопку = Ложь;
            
            очереднойСиноним = ИсходныеСинонимы.Добавить();
            очереднойСиноним.SourcePath = СтрЗаменить(_xmlФайл, ТекущийКаталог(),"");
            очереднойСиноним.ElementType = "Button";
            очереднойСиноним.ID = текущееИмяКнопки;
            очереднойСиноним.Descr = _читательФайла.Значение;
            
        КонецЕсли;
        
        Если ожидаюPopUp И _читательФайла.ТипУзла = ТипУзлаXML.Текст И текущийЭлемент = "v8:content" Тогда
            //Сообщить("Не хватает XPath очень " + _читательФайла.Значение);
            ожидаюPopUp = Ложь;
            
            очереднойСиноним = ИсходныеСинонимы.Добавить();
            очереднойСиноним.SourcePath = СтрЗаменить(_xmlФайл, ТекущийКаталог(),"");
            очереднойСиноним.ElementType = "PopUp";
            очереднойСиноним.ID = текущееИмяPopUp;
            очереднойСиноним.Descr = _читательФайла.Значение;
            
        КонецЕсли;
        
        Если ожидаюПолеВвода И _читательФайла.ТипУзла = ТипУзлаXML.Текст И текущийЭлемент = "v8:content" Тогда
            //Сообщить("Не хватает XPath очень " + _читательФайла.Значение);
            ожидаюКолонкуПоля = Ложь;
            
            очереднойСиноним = ИсходныеСинонимы.Добавить();
            очереднойСиноним.SourcePath = СтрЗаменить(_xmlФайл, ТекущийКаталог(),"");
            очереднойСиноним.ElementType = "InputField";
            очереднойСиноним.ID = текущееИмяПоляВвода;
            очереднойСиноним.Descr = _читательФайла.Значение;
            
        КонецЕсли;
        
        //Сообщить("Тип " +  _читательФайла.ТипУзла + " Имя " + _читательФайла.Имя + " " + _читательФайла.Значение);
        
    КонецЦикла;
    
    Возврат ИсходныеСинонимы;
    
КонецФункции

таблицаСинонимов = Новый таблицаЗначений;
таблицаСинонимов.Колонки.Добавить("SourcePath");
таблицаСинонимов.Колонки.Добавить("ElementType");
таблицаСинонимов.Колонки.Добавить("ID");
таблицаСинонимов.Колонки.Добавить("Descr");

структураЛокализации = Новый Массив;

Сообщить("Ищу файлы форм и метаданных");

КаталогИсходников838 = ОбъединитьПути(ТекущийКаталог(),"temp","epfs","vanessa-behavior");

Сообщить("Поиск текстовых полей RU в исходниках " + КаталогИсходников838);

массивФайлов = НайтиФайлы(КаталогИсходников838,"*.xml",Истина);

Для каждого _файлМетаданных Из массивФайлов Цикл
    Сообщить("Обрабатываю " + _файлМетаданных.ПолноеИмя);
    
    КоллекцияСинонимов = НайтиСинонимыВФайле(_файлМетаданных.ПолноеИмя);
    
    Для каждого _синоним Из КоллекцияСинонимов Цикл
        строкаСинонима = таблицаСинонимов.Добавить();
        
        ЗаполнитьЗначенияСвойств(строкаСинонима,_синоним);
        
        Сообщить("" + _синоним.SourcePath + " " + _синоним.ElementType + " " + _синоним.ID + " " + _синоним.Descr);
        
        структураЛокализации.Добавить(Новый Структура("" + _синоним.ID, _синоним.Descr));
        
    КонецЦикла;
    
КонецЦикла;

ПарсерJSON  = Новый ПарсерJSON();

JSONЛокализацияСтрокой = ПарсерJSON.ЗаписатьJSON(таблицаСинонимов);

путьДляСохраненияПравил = ОбъединитьПути(ТекущийКаталог(),"locales","ru","behavior.localize.rules");

_дескрипторЗаписиПравил = Новый ЗаписьТекста;
_дескрипторЗаписиПравил.Открыть(путьДляСохраненияПравил);
_дескрипторЗаписиПравил.ЗаписатьСтроку(JSONЛокализацияСтрокой);
_дескрипторЗаписиПравил.Закрыть();

путьДляСохраненияИсходныхТекстов = ОбъединитьПути(ТекущийКаталог(),"locales","ru","behavior.json");

_дескрипторЗаписиСтрок = Новый ЗаписьТекста;
_дескрипторЗаписиСтрок.Открыть(путьДляСохраненияИсходныхТекстов);
_дескрипторЗаписиСтрок.ЗаписатьСтроку(ПарсерJSON.ЗаписатьJSON(структураЛокализации));
_дескрипторЗаписиСтрок.Закрыть();
